package com.offcn.bigdata.sql.p2

import org.apache.spark.sql.SparkSession

/**
  * SparkSQL自定义函数：
  *     自定义的UDF  ：one-2-one
  *     自定义的UDAF ：many-2-one
  *           UDTF  ：one-2-many
  */
object FunctionOps {
    def main(args: Array[String]): Unit = {
        val spark = SparkSession.builder()
            .appName("FunctionOps")
            .master("local[*]")
            .getOrCreate()
        // step 2. 完成udf的注册
        spark.udf.register("myLen", (str: String) => myStrLen(str))
        val pdf = spark.read.json("file:/E:/data/spark/sql/people.json")

        pdf.createOrReplaceTempView("person")
        // step 3. 直接进行调用
        val sql =
            """
              |select
              |  name,
              |  length(name) len,
              |  myLen(name) my_len
              |from person
            """.stripMargin
        spark.sql(sql).show()

        spark.stop()
    }
    //step 1, 创建一个普通的函数
    def myStrLen(str: String): Int = {
        str.length
    }
}
